package br.com.dao;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.Query;

import br.com.beans.AgendaConsulta;
import br.com.beans.Medico;
import br.com.beans.Paciente;

/**
 * Classe de manipulacao de objetos persistidos via JPA
 * Objetos da classe bean AgendaConsulta
 */
public class AgendaConsultaDAO extends GenericDAO<AgendaConsulta> {

	/**
	 * Lista agendamentos de consulta por medico
	 * @param medico Medico
	 * @return Lista de objetos persistidos
	 */
	@SuppressWarnings("unchecked")
	public List<AgendaConsulta> listarPorMedico(Medico medico) {

		EntityManager em = factory.createEntityManager();
		EntityTransaction t = em.getTransaction();
		List<AgendaConsulta> list = null;

		try {

			t.begin();
			Query q = em.createQuery("from AgendaConsulta where medico = :medico");
			q.setParameter("medico", medico);
			list = (List<AgendaConsulta>) q.getResultList();
			t.commit();

		} catch (Exception e) {

			if (debugInfo) {
				e.printStackTrace();
			}
			if (t.isActive()) t.rollback();

		} finally {

			em.close();
		}

		return list;
	}

	/**
	 * Lista agendamentos de consulta por paciente
	 * @param paciente Paciente
	 * @return Lista de objetos persistidos
	 */
	@SuppressWarnings("unchecked")
	public List<AgendaConsulta> listarPorPaciente(Paciente paciente) {

		EntityManager em = factory.createEntityManager();
		EntityTransaction t = em.getTransaction();
		List<AgendaConsulta> list = null;

		try {

			t.begin();
			Query q = em.createQuery("from AgendaConsulta where paciente = :paciente");
			q.setParameter("paciente", paciente);
			list = (List<AgendaConsulta>) q.getResultList();
			t.commit();

		} catch (Exception e) {

			if (debugInfo) {
				e.printStackTrace();
			}
			if (t.isActive()) t.rollback();

		} finally {

			em.close();
		}

		return list;
	}
	
}
